4.1闲聊对话
如果还想让机器人具有闲聊的能力。
你可以在“对话搭建-闲聊对话”中一键开启闲聊能力,平台提供“自定义闲聊”和“开放式闲聊”两种类型的闲聊。
下面分别详细介绍“自定义闲聊”和“开放式闲聊”。
4.1.1自定义闲聊
自定义闲聊指用户可以自主编辑答案的闲聊类型。由平台提供特定话题,如:问候、寒暄、心情表达等,含200多个高频知识点(包括相似问和默认答案)构成。 只要打开开关,机器人即可与用户进行闲聊对话。
一键开关
打开开关,开启自定义闲聊对话能力。
关闭开关,机器人将不再具有自定义闲聊能力。
查看话题分类
- 可以在闲聊库中的查看话题分类。
编辑闲聊知识点答案
平台已提供默认的知识点回复答案。
支持用户自主编辑回复答案,保存后即可生效。
4.1.2开放式闲聊
开放式闲聊不针对特定话题,背后由百万级别闲聊语料作为支撑,可以与用户做出话题更广、更有趣的对话。
特别是在用户消息无法触发问答、任务对话时,开启后可以极大优化兜底体验,机器回复更加多样和智能,而不再是单一兜底回复。
一键开关
打开开关,开启开放式闲聊。
关闭开关,机器人将不再具有开放式闲聊能力。
- 自定义闲聊与开放式闲聊关系
- 自定义闲聊与开放式闲聊可以同时开启,机器人优先给出自定义闲聊的答案。
- 闲聊型对话优先级
- 闲聊对话的开启,默认召回优先级最低,不会影响正常问答对话、任务对话和关键词规则匹配。
- 如需提高优先级,可在[机器人-回复策略-机器人策略]中调整优先级。
4.2回复策略
4.2.1对话阈值
在阈值设置中,可以设置问答对话、任务对话、和闲聊对话的阈值。
- 当一个知识点相似问的置信度超过了所设置的问答阈值时,就会被选入机器人的候选回复中。
- 当一个意图触发器置信度超过了所设置的任务阈值时,就会被选入机器人的候选回复中。
- 当一个闲聊知识点的相似问的置信度超过了所设置的闲聊阈值时,就会被选入机器人的候选回复中。
常见的需要调整阈值的场景有
- 用户消息与知识点中的相似问并不相符,但机器人将它们匹配到了一起:此时可以调高阈值。
- 用户消息应该被匹配到某个知识点,但是却没有匹配到,因此机器人发出了兜底回复:此时可以调低阈值。
提示: 在这一步,当一个关键词被匹配到时,关键词所触发的知识点或者意图会进入候选回复中。因为关键词只有匹配和不匹配两种状态,所以此处不涉及到置信度阈值的设置。
所有机器人的候选回复会进入下一步回复方式做进一步的处理。
4.2.2回复模式
吾来中有两种回复模式配置,一般使用智能模式,如果有特殊要求可以使用自定义模式。
4.2.2.1智能模式
在对话搭建-回复策略-机器人策略中第一项便是回复模式选择,点击智能模式前的单选按钮即可选择智能回复模式。
- 对于任务、问答、闲聊,需要设定一个统一的阈值,三种对话都以这个阈值来判断是否召回。
- 当多个对话类型都有高于阈值的答案时,召回分数最高的一个。
- 当多个对话类型的答案分数相同时,按以下列优先级召回:任务>问答>闲聊。
4.2.2.2自定义模式
在回复模式选择自定义模式即可配置自定义的回复模式。主要配置项除了阈值还有对话类型优先级和回复方式。
对话类型优先级指的是,当机器人为同一句用户消息匹配到了多种对话类型时,应该优先回复哪一个。
回复方式指的是,多种对话类型的回复是否自动发送出去。 回复方式提供三种模式:
- 指定优先 选出对话类型优先级中排序第一的对话类型,并发送该类型的所有回复。排序方式为:在不同对话类型之间按指定顺序排序,在同一类型内按置信度排序。
- 全回复 每种对话类型均发送超过阈值且置信度排序第一的回复。回复被发送的顺序取决于对话类型优先级中的排序。
- 不回复 每种对话类型生成置信度排序第一的回复,但回复不自动发送给用户,而是按照对话类型优先级中的排序,展示在人工客服的工作台。
下面我们来用一个例子说明对话优先级和回复方式对实际机器人回复的影响:
假设一条用户消息发到机器人之后,机器人得到:
- 20条知识点大于问答阈值;
- 2条关键词匹配到了回复;
- 3条任务意图大于任务阈值;
- 4条闲聊知识点大于闲聊阈值。
那么在不同回复方式下的处理方式如下:
- 在指定优先模式下,
- 如果优先级第一的对话类型为问答:机器人会发送1条问答回复。
- 如果优先级第一的对话类型为任务:机器人会发送1条任务回复。
- 如果优先级第一的对话类型为关键词:机器人会发送1条关键词回复。
- 如果优先级第一的对话类型为闲聊:机器人会发送1条闲聊回复。
- 在全回复模式下,
- 机器人会发送1条问答回复,1条任务回复,1条关键词回复,和1条闲聊回复。
- 在不回复模式下,
- 机器人不会发送任何消息,但是会将1条任务回复展示在即时沟通的[会话页面]中。
常见的需要调整对话优先级和回复方式的场景
- 使用指定优先的场景:
- 如果用户消息既匹配到了问答知识点,又匹配到了意图触发器,而你希望优先由任务对话来处理用户的请求,那么可以将任务对话放在对话类型优先级的第一个,并设置回复方式为指定优先。
- 指定优先的设置结果如下:
使用全回复的场景:
如果用户消息既匹配到了问答知识点,又匹配到了意图触发器,而你希望将两者的回复都发送给用户,那么可以设置回复方式为全回复。
比如:在对话中,用户回答意图提出的询问之前,需要先咨询一些信息。
- 机器人:请问您在哪个城市?
- 用户:你们都在什么城市有活动?
- 机器人:所有的省会城市都会举办活动。(由问答对话回复)
- 机器人:请问您在哪个城市?(由任务对话进行重复询问)
- 用户:我在杭州。
- 全回复的设置结果如下:
使用不回复的场景:
- 如果配合人工客服工作台使用,希望机器人所有的回复都不自动发送给用户,而是作为人工客服的提示,那么可以设置回复方式为不回复。
- 不回复的设置结果如下:
提示: 如果三种回复方式都不能完全满足需求,需要定制开发,那么可以使用开放平台接口获取机器人回复,并进行相应的定制。具体说明请见开放平台文档。
4.2.3兜底回复
兜底回复是机器人无法给出准确答复时所使用的话术。
比如,常见的兜底回复可能设置为:“对不起,这个问题我不太清楚,请您留下联系信息,稍后会有专员为您解答。”
- 兜底回复只有在所有对话类型都没有合适的回答时,才会发出。
如果问答对话、任务对话、闲聊对话、关键词对话中有任意一个可以给出合适的回答,机器人就不会发出兜底回复。
1 选择开启兜底回复。
2 点击文字图标,并在出现的输入框中输入希望机器人回复的兜底内容。
3 如果需要,可以使用其他消息类型的回复。
4 如果需要,可以添加多条兜底回复。最多10条。
5 点击机器人策略页面底部的保存。
4.2.4转人工
转人工指的是当机器人回答不了用户消息时,转交给人工客服处理。
你的人工客服团队可以使用系统自带的即时沟通功能,也可以使用第三方的客服工作台。
- 使用 即时沟通 时,转人工的设置方式请见本章节的 如何设置转人工策略。
- 使用第三方的客服工作台时,转人工的设置会体现在开放平台接口的字段中。具体说明请见开放平台文档。
4.2.5延迟发送
延迟发送功能模拟了人类发送消息的速度,在收到用户消息后会停顿一段时间再回复。
开启后只针对文本消息生效:
- 小于等于50字符的文本消息将在1s后发送回复。
- 大于50字符的文本消息将在2s后发送回复。
1 选择开启延迟发送。
2 点击机器人策略页面底部的保存。
4.2.6相似知识点设置
有时候你可能希望在回答用户的问题之余,引导用户去了解更多机器人可以提供的信息。
这时就可以使用相似知识点设置来实现自动推荐相似知识点。
这个功能开启后的效果是:
1 推荐和用户所问的问题相似的其他知识点。
2 当用户点击推荐的知识点之后,机器人回复相应知识点的答案。
提示: 如果回复中包含多条答案,只会在最后一条答案的文本回复后添加相似问题。 如果最后一条答案配置了“推荐知识点”,会展示自定义的推荐知识点,而不展示此处配置的“相似知识点”。详情请查看[知识点配置]。
1 选择开启自动推荐相似知识点。
2 设置相似知识点数量上限。上限允许的范围为1~5。
3 设置知识点分类。
- 如果设置了知识点分类,只有在指定知识点分类下的知识点才会被推荐。
- 如果此处留空,则所有分类下的知识点都可能被推荐。
4 设置置信度区间。
- 如果开启相似知识点,则必须设置置信度区间。只有置信度分数在配置的区间内,才会被推荐。
5 点击机器人策略页面底部的保存。
4.2.7问答消息智能改写
问答消息智能改写开关在机器人策略的页面底部,主要有两方面的功能:
- 利用用户前一轮消息中的实体词对当前消息进行意图补充。
- 尝试在召回问题时删除用户问题中可能含有的一些无意义的词汇,如:“请问”、“问下”、“您好!我想问”等。
改写完成之后的句子会和原句打分一起比较,召回置信度比较高的结果。
效果在调试机器人展示如下:
4.3专有词汇
专有词汇:表示具体的人、物、地点、机构等事物的专有名称。例:“妊娠高血压综合征”、“高血糖”等。
同义词:即专有词汇的相同说法,例“妊娠高血压综合征”的同义词“妊娠高血压”、“妊高症”、“妊娠期高血压”等。
用途:专有词汇主要影响问答对话的分词服务,当添加专有词汇后,机器人将会把这个词当成一个整体进行处理,不再进行分词。
4.3.1手动添加专有词汇和同义词
点击“添加专有词汇”按钮,可添加“专有词汇”即专有词汇的同义词。
多个同义词之间以逗号分隔。
4.3.2批量导入导出
点击“批量添加专有词汇”,下载导入模板,填写数据后,进行导入。
点击“批量导出专有词汇”,可直接导出该机器人下的所有专有词汇。
4.4实体
实体是自然语言中的信息元素,由字词或短语组成。包括人名、组织机构名、地理位置、时间、日期等。
实体服务于实体抽取,目的是从自然语言文本中抽取出关键信息,更好的理解和处理自然语言。实体抽取是解决很多自然语言处理的基础,也是知识抽取中最基本的任务。
平台中实体主要用在“对话搭建-词槽管理-引用实体”和“问答对话-知识点-关联实体”。
在学习实体详情前,让我们了解下几个非常重要的概念,包括:实体名称、实体值、实体值的多种说法。
实体名称:定义要从用户输入的消息中提取的信息类型,表示同一类领域词。例如:城市、日期、公司、水果等。
实体值:表示信息通用的标准说法。例如:城市的标准实体值有“北京”、“上海”、“深圳”等。
实体值的多种说法:表示标准实体值的多种说法。例如“北京”的多种说法有“帝都”、“首都”、“中国首都”等。针对每一个实体,你需要提供一个实体值及多组实体值的多种说法。
实体抽取的过程,主要做两件事情:
抽取出文本中的实体值或实体值的多种说法。如:北京、帝都、首都、中国首都。
将实体值的多种说法归一化为标准实体值。如:帝都的天气怎么样,将“帝都”归一化为“北京”,机器人只需要处理“北京的天气怎么样”就可以。
实体分类
平台将实体分为了预设实体和自定义实体。根据实体抽取数据匹配的方式,将自定义实体分为了“枚举实体”、“正则实体”和“意图实体”。
预设实体:指系统预置好的实体。包括日期、时间、城市等33个,你可以直接在词槽、知识点中使用系统预设实体进行归一化抽取。
自定义实体:指自主创建的实体。你也可以根据业务需要,创建“自定义实体”,用于匹配领域知识。例如:食材、订单号、品牌名称、购买渠道等。
4.4.1预设实体
预设实体是平台提供的预置好的实体,用于处理最常见的实体。如日期、时间、城市等,你可以在预设实体页面,查看全部预设实体。
同时页面中提供了测试预设实体归一化的功能,你可以输入用户消息测试实体抽取结果。
举例:以预设实体“城市”为例,用户发来消息“帝都有什么特色美食?”,机器人抽取到的实体名称为“城市”,归一化的实体值为“北京”。
注:这里仅作为测试预设实体抽取,当发生在真实对话场景时,实体的抽取规则会依赖多种因素。
4.4.2自定义实体
自定义实体分为“枚举实体”、“正则实体”和“意图实体”。
你可以自行创建、设置实体值及多种说法。自定义实体创建成功后,稍等片刻即可在调试机器人测试实体抽取结果。
4.4.2.1枚举实体
枚举实体指实体值可枚举,根据词表匹配进行归一化的实体。例如:实体“水果”的实体值可枚举为“苹果”、“香蕉”、“桃子”等。
枚举实体抽取是根据用户消息与枚举的实体值匹配进行归一化的。所以理论上,每个实体值添加的多种说法越多,在进行实体抽取时,越容易抽取到该实体。
设置成功后,系统会认为多种说法中,每一项都是同样含义的,用户消息中包含任意一个多种说法,都会归一化为标准实体值。
例如:添加枚举实体“水果”,“苹果”是其中的一个实体值,“红富士”是实体值“苹果”的多种说法,那么当用户发送的消息包含“苹果”或“红富士”关键字时,都会归一化为标准的实体值“苹果”。 添加枚举实体
- 点击“新建实体”,在弹窗中,输入实体名称、实体描述。
- 点击“新增一组”,可单个添加枚举实体的实体值和实体值的多种说法。
- 点击“确认”,完成枚举实体创建。
- 点击新建实体右侧按钮,可批量导入枚举实体。
- 点击“导出”,可导出配置的枚举实体。
注意:
- 批量导入实体时,实体名称为新增逻辑,增加平台没有的实体名称及内容,不更改平台中原有的实体名称及内容。
- 如果导入的实体名称在平台上已经存在,实体值及其多种说法均为覆盖逻辑。
如果需要在平台已有实体基础上新增实体值,请先导出已有实体并新增行添加实体值,以免覆盖实体中原有的实体值。
4.4.2.2正则实体
有些实体需要匹配规则,而不是匹配具体字词。 例如,身份证号码、手机号、订单号、牌照等。
这类场景的需求,你可以使用正则表达式实体,通过正则表达式进行匹配,识别出用户消息中的片段,作为实体抽取结果。
以下为一些常用的正则表达式,可直接复制使用。
QQ号:[1-9][0-9]{4,}
手机号:(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])[ -]?(\d{4})[ -]?(\d{4})
微信号:\^[a-zA-Z][a-zA-Z0-9_-]{5,19}$
身份证号:^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$
添加正则实体
切换至正则实体页面,点击“新建实体”,在弹窗中,输入实体名称、实体描述。
设置正则表达式:必填。根据业务场景,添加正则表达式。添加正则表达式时,支持使用()分割正则片段。
设置替换文本:可使用“$”来引用「正则片段」抽取的实体值。同时支持对引用的正则片段前后拼接文本。
示例:设置手机号正则表达式,(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])(\d{8})
若设置替换文本为:$1,用户QUERY为:手机号是18288883689,则抽取结果是:182
若设置替换文本为:尾号为($3),用户QUERY为:手机号是18288883689,则抽取结果是:尾号为3689
点击“确认”,完成正则实体创建。
- 点击新建实体右侧按钮,可批量导入正则实体。点击“导出”,可导出配置的正则实体。
4.4.2.3意图实体
意图实体不同于枚举实体,可以将用户的整条消息和实体值的相似说法进行相似度匹配,抽取出实体值。
示例:创建一个意图实体“症状”,设置实体值为“轻咳”,添加“轻咳”、“有点咳嗽”、“轻微咳嗽”、“咳嗽了几次”等作为实体值的多种相似说法。那么当机器人询问用户“有什么症状吗?”,此时用户回复“轻微咳嗽了几下”时,可以通过相似说法,匹配到实体值“轻咳”。
添加意图实体
切换至意图实体页面,点击“新建实体,添加实体值及实体值的相似说法。
点击“新增实体值”,添加实体值及实体值的相似说法。
点击“确认”,完成意图实体创建。
- 点击新建实体右侧按钮,可批量导入意图实体。点击“导出”,可导出配置的意图实体。
4.5词槽
词槽是为了完成特定任务所需要满足的变量。之所以说它们是变量,是因为它们可能的取值是不确定的并且很广泛。
在之前句式的例子中,产品就是词槽,产品型号就是来筛选像口红、粉底等这样的能放入产品中的值。
词槽的另外一大用途是在任务中使用,大家可以结合下面这个例子来理解:
在多轮对话中,机器人往往需要保存对话上文的各类核心信息,然后,利用这些信息去推动对话发展,形成对话下文。
比如,机器人和终端用户的一段多轮对话:
对话示例
机器人:请问,您的出发地和目的地是哪里?
用户:从上海飞北京
机器人:好的。上海到北京的机票有很多班。请问,您想几点出发?
机器人需要从与用户的第一轮对话中,获取并记住核心信息:出发地、目的地。然后,利用这个核心信息查询符合条件的航班,并进一步推动对话向下进行。
如果想要实现这种效果,存放核心信息就需要使用到“词槽”。在这个例子中,机器人需要完成的任务是“订机票”。为此,需要满足的变量包括“出发地”、“目的地”、“舱位”、“出发时间”等等。这些就是词槽。
4.5.1词槽的新建与编辑
1 点击新建词槽。
2 选择问答对话使用或任务对话使用。
3 选择引用实体。
问答对话至此操作结束,任务对话还有其他配置。
4 选择词槽的生命周期。
- 通常选择词槽值在整轮对话中被记忆。
5 选择是否整句填槽。通常不勾选。详情请见下文概念 - 填槽方式。
多个引用实体的填槽顺序
假设你创建了一个“出发地”词槽,并且同时引用了“城市”和“机场”两个实体。如下图所示:
当用户query中包含“首都国际机场”时,两个实体值都可以抽取到:
- 通过“首都”两个字,“城市”实体会抽取出“北京”实体值。
- 通过“首都国际机场”六个字,“机场”实体会抽取出“首都国际机场”实体值。
那么,词槽中的值到底填入“北京”还是“首都国际机场”呢?
这个时候,机器人按照引用实体在词槽中的排序来做判断。在上图中可以看到,两个实体中,“机场”在前,“城市”在后。这表示我们定义“机场”优先于“城市”,于是,被填入词槽的值是“首都国际机场”。
相反,如果两个实体中,“城市”在前,“机场”在后,那么结果被填入词槽的值就会是“北京”。
你需要根据业务中的具体场景来判断哪个实体排在前面。在这个例子中,定义“机场”优先于“城市”更合理,因为对于查机票来说,机场比城市更准确。
4.5.2填槽方式
要想满足这些变量,机器人必须从其他地方获取“值”,然后赋值给词槽。这个过程称为“填充词槽”,简称“填槽”。
机器人可以通过以下方式来获取词槽值:
方式一:从用户说的话中抽取信息填槽
1 从用户说的话中抽取出“实体值”时,用“实体值”填槽
举例来说,词槽“目的地”引用了实体“车站”;实体“车站”中,有“上海虹桥”这个实体值; “上海虹桥”这个实体值的多种说法中有“上海”。
当发生下面的对话时:
对话示例
用户:帮我定明天到上海的火车票
机器人:好的
当用户说“帮我定明天到上海的火车票”时,机器人根据“上海”这个多种说法,进行以下判断和行动:
- 用户信息中包含“上海虹桥”
- “上海虹桥”是实体值“上海”的一个多种说法,因此抽取出实体值“上海”
- 将“上海”填入词槽“目的地”中
注意 问答对话中的填槽只能使用这种方式。
2 如果从用户说的话中无法抽取“实体值”时,可以选择用整个句子填槽
有时候,用户可能没有给出机器人预期的回复,导致无法抽取到所需要的实体值。这时,可以选择将用户消息整体作为词槽的值,平台将这种方式称为“整句填槽”。
比如在下面这段对话示例中:
对话示例
机器人:请留下您的手机号
用户:我不想留手机号
当用户说“我不想留手机号”这句话时,机器人无法抽取到符合“手机号”实体规则的实体值(手机号的规则通常为11位的数字),所以词槽“用户的手机号”就可能为空。
但是,如果开启整句填槽,那么如果用户回复“我不想留手机号”,词槽“手机号”的值就会变成文本“我不想留手机号”。
方式二:从接口单元中设置的第三方接口中查询信息,用该信息填槽
词槽的值还可以从第三方接口中查询信息。
比如,在查询机票的意图中有以下步骤:
- 机器人询问用户出发地、到达地、出发时间。
- 机器人将出发地、到达地、出发时间传入第三方接口,接口根据这三个信息返回航班信息。
- 机器人将查询到的航班号发送给用户。
在最后一个步骤中,就需要把从第三方接口中的信息填入词槽中,然后才能在后续流程中发送给用户。关于这种使用方式请参考[单槽接口单元]。
方式三:从用户属性中查询到属性值,用该属性值填槽
有时候,机器人可能需要记住用户的某些特征,并根据这些特征提供给用户个性化的信息。
比如,在查询机票的意图中实现这样的效果:
- 在用户查询机票信息时,机器人先去了解用户是否是会员。
- 对非会员用户,只返回航班信息。
- 对会员用户,除了返回航班信息外,还返回航班能产生多少会员积分。
这种场景下,就需要把从用户属性中读取信息填入词槽中。关于这种使用方式请参考[属性读取单元]。
方式四:从表格数据中查询数据,用该数据填槽
机器人还可以从表格数据中查询特定信息,填入词槽中。关于这种使用方式请参考[表格读取单元]。
方式五:通过赋值或正则替换填槽 通过任务对话中运算单元的赋值模式或者正则抽取获取特定信息填入词槽中。关于这种使用方式请参考[词槽运算单元]。
4.5.3系统词槽
系统还提供了预设好的系统词槽,是任务对话运行时,系统自动记录的信息。比如:当前系统时间。
目前平台提供的系统词槽有:
系统词槽名 | 调用样式 | 用例或说明 |
---|---|---|
上条用户消息id | {slot=sys_msgid} | 用户上一条发来消息的id |
上条用户消息 | {slot=sys_query} | 引用用户上一条发来消息 |
吾来上的渠道用户id | {slot=sys_user_id} | 吾来上的用户名,对于web、小程序SDK,是自动创建的 |
吾来上的用户昵称 | {slot=sys_nickname} | 吾来上的用户昵称,对于企业微信渠道,是员工姓名 |
当前年份 | {slot=sys_year} | 当前年份(收到用户最近一条query的年),格式为YYYY |
当前月份 | {slot=sys_month} | 当前月份(收到用户最近一条query的月),格式为MM |
当前日期 | {slot=sys_day} | 当前日期(收到用户最近一条query的日),格式为DD |
当前小时 | {slot=sys_hour} | 当前小时(收到用户最近一条query的小时),格式为HH |
当前分钟 | {slot=sys_min} | 当前分钟(收到用户最近一条query的分钟),格式为MM |
当前秒数 | {slot=sys_sec} | 当前秒数(收到用户最近一条query的秒数),格式为SS |
当前星期几 | {slot=sys_weekday} | 当前星期几(收到用户最近一条query的星期数),格式为0~6的数字,0为周日,1~6为周一~六 |
当前的秒级时间戳 | {slot=sys_sec_ts} | 当前时间秒级时间戳(收到用户最近一条query的小时),是一个整数,含义为1970年1月1日0时0分0秒到当前时间经过了多少秒 |
非文本消息的详情 | {slot=sys_msgdetail} | 对于不同的消息格式,sys_msgdetail 存储了不同内容。 |
语音消息: "voice": {"resource_url":"http://sampleURL", "type": "sampletype", "recognition": "sampleText"} | ||
图片消息: "image": {"resource_url": "http://sampleURL"} | ||
视频消息: "video": {"title":"sampleTitle", "thumb":"sampleFileName", "description":"sampleDesc","resource_url": "http://sampleURL"}。 | ||
文件消息: "file": {"filename":"sampleFileName", "resource_url": "http://sampleURL"} | ||
卡片消息: "share_link": {"title":"sampleTitle", "description":"sampleDesc", "cover_url": "http://sampleURL", "destination_url": "http://sampleURL"} |
操作指南
系统词槽可以在意图流程中使用。
使用方式有两种:
1 在设置对话单元的回复、和单元的跳转关系时,可以使用:{slot=slot_name} 的格式引用词槽的值。这个格式既可以引用自定义词槽,也可以引用系统词槽。效果如下:
2 在词槽运算单元中,可以将系统词槽赋值给一个普通词槽,并在后续流程中使用。效果如下:
4.5.4词槽的生命周期
词槽的生命周期,指的是词槽中的值在多长时间内被保留。
常用的生命周期有两种:
- 词槽值在整轮对话中被记忆,
- 词槽值在单元跳转后被清空。
词槽值在整轮对话中被记忆
在询问了出发地、目的地、和出发时间之后,使用一个单槽接口单元去查询航班。那么就需要以上三个词槽值一直被记录、并输入给单槽接口单元作为请求参数。
这种情况下,就需要选择“词槽值在整轮对话中被记忆”。
词槽值在单元跳转后被清空
一个用于做小游戏的意图中,预期的机器人和用户的对话为:
- 机器人:请问下面这道题,哪个是正确答案: A. 婴儿不能吃苹果;B. 婴儿能吃苹果;C. 要看吃的是什么苹果。
- 用户:A (此时,A被填入关联词槽“用户选择”。然后,机器人判断用户回答正确,进入下一题。否则结束游戏。)
- 机器人:请问下面这道题,哪个是正确答案: A. 婴儿能喝牛奶;B. 婴儿不能喝牛奶;C. 要看牛奶的温度。
- 用户:B (此时,B被填入关联词槽“用户选择”。)
这种情况下,当用户在第一题选择了A,判断回答正确并进入了第二题之后,词槽“用户选择”中的值需要被清空,以便能在第二题中接收到用户新的选择,这就可以选择“词槽值在单元跳转后被清空”。
词槽还有一种清空方法是使用词槽运算单元,具体可以参看词槽运算单元章节相关说明。
4.5.5词槽值的保留时长
除了词槽的生命周期之外,词槽的值能够保留多久还与意图的设置有关。与此相关的意图设置有:
- 意图的闲置等待时长
- 意图是否“保留词槽”
- 意图终点单元是否“保留词槽”
在这些设置的不同组合下,词槽值保留时长的效果如下表所示:
词槽设置中的生命周期 | 是否在意图的闲置等待时长内 | 运行位置和“保留词槽”的设置 | 词槽值保留时长的效果 |
---|---|---|---|
单轮后清空 | 任意 | 任意 | ❌ 单轮后即清空 |
整个流程内生效 | 是 | 尚未运行到意图终点单元、或空的分支跳转节点 | ✅保留 |
整个流程内生效 | 是 | 运行到意图终点单元、且意图终点单元的保留词槽设置为:不保留 | ❌ 清空 |
整个流程内生效 | 是 | 运行到意图终点单元、且意图终点单元的保留词槽设置为:保留 | ✅保留 |
整个流程内生效 | 是 | 运行到空的分支跳转节点、且意图的保留词槽设置为:不保留 | ❌ 清空 |
整个流程内生效 | 是 | 运行到空的分支跳转节点、且意图的保留词槽设置为:保留 | ✅保留 |
整个流程内生效 | 不是 | 任意 | ❌ 清空(如果当前没有其他使用该词槽的意图处在运行状态) |
整个流程内生效 | 不是 | 任意 | ✅保留(如果当前有至少一个其他使用该词槽的意图处在运行状态) |
提示: 如果一个词槽被多个意图使用,那么只有当所有运行中且使用了该词槽的意图,都根据上述规则到了需要清空词槽的时刻,该词槽才会被清空。
4.6表格知识
在问答对话的搭建中,机器人的知识是用一个一个知识点的形式来组织的。这种知识的组织方式适用的场景是开发者的数据本身就是由一个一个句子构成的非结构化的语料。
如果机器人开发者的数据形式更加结构化,那么,可以使用知识图谱技术来组织机器人的知识。
利用本平台可以创建基于表格数据的知识图谱并将该图谱用于问答对话和任务对话。为了掌握开发机器人的这一技术,请先学习必要的概念,然后掌握相关的操作。
4.6.1知识图谱与其“三元组”构件
用结构化的方式来表达和连接知识(或者信息、数据)的技术称为知识图谱技术。一个知识图谱的基础组成单元是三元组。
一些非常专业的研究中,会将三元组称为主体(Subject)-谓词(Predicate)-对象(Object)。其中,“主体”和“对象”都代表现实世界中的一些“事物”(Thing)。“谓词”则代表主体和对象之间的“关系”。
举例来说,有一个关于人物的知识是“姚明是一个运动员”。用三元组来表示,则是 姚明---是一个---运动员。
其中,姚明是“主体”、运动员是“对象”,“是一个”是谓词,代表姚明和运动员之间的关系是“A是B的一个成员”。
但是,这些术语过于艰深,不便于理解。我们用“主体(Subject)-属性(Attribute)-属性值(Value)”三个术语来代替。虽然叫法不同,但是含义大致一样。
4.6.2表格数据
在很多现实应用中,我们发现,企业的领域知识通常是用“表格”这种形式来承载的。
表格是一个二维数据格式,由行和列两个维度。
从“行”的角度看,第一行称为“表头”;其余行称为“表体”。
从“列”的角度看,每一列由“列名称”和“列取值”构成。
所有的“列名称”构成表头;所有的“列取值”构成“表体”
举例来说,开发者希望搭建一个智能投顾机器人,来辅助理财用户选择适合自己的基金产品。开发者拥有各类基金产品的知识,并以表格的形式来维护这些知识。一个简单的表格,如下(表格数据仅作为演示,不具有真实性):
基金 | 分类 | 类型 | 投资范围 | 发行体 | 购买方式 | 年涨幅 |
---|---|---|---|---|---|---|
沪深300 | 成长型 | 投资基金 | 证券 | 基金公司 | 申购 | 0.16 |
交银 | 混合型 | 指数基金 | 股票 | 银行 | 认购 | 0.48 |
中海 | 收入型 | 投资基金 | 项目 | 资产管理 | 认购 | 0.34 |
“基金”、“分类”、“类型”、“投资范围”、“发行体”、“购买方式”、“年涨幅”共同构成“表头”。 所有取值共同构成“表体”。
4.6.3表格知识图谱
将知识图谱概念和表格数据形式结合起来,构成的知识图谱称为表格知识图谱。具体地,
表格第一列称为“主体列”。
“主体列”由“主体”和“主体值”构成。
“主体”就是“主体列”与“表头”的交点位置的单元名称。
“主体值“为主体列的其余单元格取值。
举例来说,主体名称为”基金“;”沪深300“等为”主体值“。
表格的其他列称为“属性列”。
“属性列”由“属性名称”和“属性值”构成。
“属性名称”就是“属性列”与“表头”的交点位置的单元名称。
“属性值“为属性列的其余单元格取值。
举例来说,属性名称为”类型“;”成长型“等为”属性值“。
4.6.4任务对话表格知识的配置
在平台中如何创建一个上面的表格呢?你需要完成以下3步:
创建表格
创建表头
添加表格数据
表头创建好后,维护表格数据的方式有三种,你可以:
批量导入表格附件;
在线编辑新增整行数据;
通过任务对话进行表格写入;
下面,分别介绍这些操作。
第一步:创建表格
1 在“任务对话>表格数据”中,点击“新建表格”。
2 设置表格名称,即完成表格创建。
3 点击“编辑详情”可以对表格的“表头”和“表体”内容进行编辑。
第二步:创建表头
1 点击“编辑详情”,进入“表格详情”。
2 点击“新建表头”,进入“表头编辑弹窗”。
3 输入“主体名称”
- 最多支持输入20个字符
4 设置“表体”数据的数据格式
数据格式包含:文本、整数、小数、日期。
设置数据格式后,可以在表格读取单元使用更多的定位查询条件。
5 添加属性并输入“属性名称”。
6 点击确定,创建好“表头”。
第三步:引用实体
引用实体实际指关联实体,非必须。
作用:将某列关联一个实体后,上传表格数据,将会把该列的值(主体值或属性值)同步到关联实体的实体值中。这样可以保证该值作为查询条件时,可以被抽取到。
同步实体值逻辑:
仅支持同步到枚举实体的实体值中。
批量导入和在线编辑的数据,保存后会直接同步到关联实体的实体值。
写表单元写入的数据,会高亮展示,需要手动点击同步实体值按钮。
第四步:设置数据格式
支持定义对应列的数据类型,包括:文本、整数、小数、日期;
作用:
当数据格式设置为“整数”、“小数”、“日期”时,该列在读表单元中,作为定位列时,查询条件支持选择=、>、<。
当数据格式设置为“文本”时,该列在读表单元中,作为定位列时,查询条件支持选择=、包含。
“批量上传”表格数据
1 点击“导入数据”,下载《属性值导入模板》。
2 在模板中填入表格数据。
3 上传并导入数据,完成批量导入数据。
“在线编辑”表格数据
支持新增行、编辑行、删除行等操作,提交保存后完成数据录入;
1 新增行
- 在表格中插入一行,填入数据后保存,其中主体值不可为空;
2 编辑行
- 主体值不可以修改,属性值可以修改,支持删除为空;
3 删除行
- 删除行后,会删除整行数据。
任务对话中除了手动添加数据外,还可通过“写表单元”写入数据
- 通过任务机器人写入表格数据,详情参照[表格写入单元]。
4.6.5问答对话个性化回复表格的配置
个性化回复是以二维表格来存放知识点个性化答案的功能,结合知识点中的个性化回复配置,机器人实现基于词槽和基于用户属性的个性化回复。
个性化回复表格由属性列和答案列组成。
属性列:既可以存放词槽引用实体的实体值,也可以存放用户属性的属性值。最多允许输入128个字符。
答案列:存放个性化答案,单个单元格最多支持10条答案,支持7种消息类型及回复策略等,详情可参考知识点配置-1.2.4 添加回复答案。
当知识点获取到的词槽值或用户属性值匹配到属性值的内容时,回复该行属性值对应的答案。从而实现“基于词槽值”和“基于用户属性值”的个性化回复。
创建表格
1 在“个性化体验-个性化回复”中,点击“新建表格”。
2 设置表格名称,即完成表格创建。
创建表头
1 点击“编辑详情”,进入“表格详情”。
2 点击“新建表头”,进入“表头编辑弹窗”。
3 输入“属性列名”,最多允许添加10组属性列;
4 输入“答案列名”,最多允许添加20组答案列;
5 点击确定,创建好“表头”。
通过“批量上传”功能添加数据
1 点击“导入数据”,下载《表格导入模板》。
2 在模板中填入属性值和答案。
3 上传并导入数据,完成批量导入数据。
需要注意的是,这里的答案列的内容仅支持上传文本类型的答案,当一个单元格中需要输入多条答案时,可以用||进行分割。
“新增行”添加表格数据
支持新增行、编辑行、删除行等操作,提交保存后完成数据录入;
1 新增行
在表格中插入一行,填入属性值后保存;
属性值保存后,可以点击答案列“编辑答案”,录入答案数据;
2 编辑行
- 支持编辑行,当添加多列属性时,单行数据中,至少有一个属性值不可以为空;
3 删除行
- 删除行后,会删除整行数据。
4.7用户属性
假如你想让机器人针对同一个问题给不同的用户以不同的答复,实现千人千面的人性化回复,那么你需要了解下本节新引入的概念“用户属性”。
用户属性:是终端用户共同具备的不同维度的属性,如:姓名、性别、小区、城市等。
属性值:是每个终端用户个体的属性值。如:李明是北京海淀小区的一名男士,那么:
用户属性“姓名”对应的属性值是“李明”;
用户属性“性别”对应的属性值为“男”;
用户属性“小区”对应的属性值是“海淀小区”;
用户属性“城市”对应的属性值为“北京”。
当获取到用户属性及属性值后,机器人就可以通过获取到的用户不同的属性值。
实现同一属性,不同属性值的用户在触发同一个知识点或任务意图的情况下,给予个性化答案的场景。
比如某小区业主在咨询物业维修服务的场景下。
小区A业主和小区B业主问同样的问题,在知识库中是触发了同一个知识点。机器人可以根据两个用户身上的属性值“小区名称”不同,给予不同的回复。可能会展开下面的两段对话:
对话示例
业主(小区A):物业的维修电话
机器人:A小区的物业维修电话是010-648756XX
业主(小区B):咱小区的物业维修电话是多少
机器人:您需要下载B小区“官方APP”通过在线渠道报修
用户属性分类
属性是获取的终端用户的属性,需要通过渠道传入,用户属性分为“预设属性”和“自定义属性”,都可以用于机器人个性化回复。
4.7.1预设属性
“预设属性”为系统定义的属性,只要对接了对应的渠道,不需要经过任何开发,即可在问答和任务对话中进行使用。
每个渠道都支持传入一定的“预设属性”,渠道接入后,自动获取该渠道对应的预设属性的属性值。各渠道支持的预设属性见下表:
预设属性 | 字段类型 | 微信公众号 | 企业微信 | Web SDK | 小程序插件 | 开放平台 |
---|---|---|---|---|---|---|
性别 | 枚举 | ✅ | ✅ | - | - | - |
城市 | 文本 | ✅ | - | - | - | - |
公众号关注时间 | 文本 | ✅ | - | - | - | - |
活跃时间 | 文本 | ✅ | ✅ | ✅ | ✅ | ✅ |
部门 | 文本 | - | ✅ | - | - | - |
职务 | 文本 | - | ✅ | - | - | - |
手机号 | 文本 | - | ✅ | - | - | - |
邮箱 | 文本 | - | ✅ | - | - | - |
用户IP | 文本 | - | - | ✅ | - | - |
标签 | 文本 | ✅ | ✅ | ✅ | ✅ | ✅ |
渠道类型 | 文本 | ✅ | ✅ | ✅ | ✅ | ✅ |
4.7.2自定义属性
“自定义属性”指用户自主创建的属性,这些属性通常是和业务关系比较紧密的。
如:历史订单信息、访问入口、关注活动等。当不同的用户询问订单物流时,就可以知道是询问的哪个订单,从而返回对应订单的物流信息。
目前只有吾来提供的Web SDK、小程序插件SDK、开放平台支持用户传入自定义属性的属性值。要通过自定义属性实现个性化回复,你需要具备一定的开发能力,将属性值按照一定的格式传入到吾来中,完整步骤如下:
在自定义属性页面添加“自定义属性”。支持创建枚举或文本类型的属性,同时支持设置属性值的有效期,超出有效期后,属性值将被清空。
按照一定的字段格式,将属性值传入到吾来中,见各渠道对接的开发文档[Web SDK-开发文档][小程序插件-开发文档]、[开放平台]。
用于“基于用户属性的问答”、“个性化回复”以及任务“读取属性”、“写入属性”单元进行使用,搭建对话流程。
添加自定义属性
点击“新增自定义属性”,在弹出的弹窗中,填写属性相关字段。
属性名称:输入属性名称,可自定义输入。
属性值有效期:支持选择长期生效属性,和“30分钟”有效期。超出30分钟后,属性值将被清空,待用户再次访问时,重新传入属性值。自定义属性,有效期一旦被设定后,不支持修改。
属性类型:指属性值的类型,分“文本类型”和“枚举型”。文本类型适用于不知道属性值具体是什么的情况,枚举型适用于属性值可枚举的情况,比如,“性别”属性的枚举值为“男”、“女”。
选择枚举类型的属性,需要填写枚举值。
4.8用户事件
事件消息
事件消息指将用户在渠道中的某些操作行为通过事件的形式传到服务器,生成的事件消息。
如:进入对话框、点击某菜单、上报地理位置等。
事件消息可作为知识点和意图的触发器,如通过“进入事件”实现欢迎语的效果。
事件列表
列表包含系统定义的所有事件消息类型,同一个事件在同一个项目中,既可以触发知识点,也可以触发意图。
遵循机器人回复策略,当问答优先于任务时,将优先召回关联事件的知识点;当任务优先于问答时,将优先触发事件关联的意图。
渠道来源指事件消息都在哪些渠道里进行了定义,若想单独针对某个渠道配置知识点或意图,可以通过属性组或读取属性单元来实现。
进入事件对应的渠道和生成时机如下:
在Web SDK中,用户首次进入SDK或刷新网页时,即生成一个进入事件消息,可以用进入事件触发知识点或意图来实现欢迎语的功能。
在小程序插件中,用户首次进入插件,即生成进入事件消息,可以用进入事件触发知识点或意图来实现欢迎语的功能。
在企业微信中,用户每次进入自建应用的会话框,都会生成一个进入事件消息。
4.8.1事件触发任务意图
鼠标移入“请选择意图”输入框时,可以在二联下拉框中选择任务,并选择该任务下的意图,完成关联。
若想取消关联任意意图,将任务选择为“空”即可。
注意:
- 仅支持选择“调试中”和“已生效”状态的意图,进行关联。
4.8.2事件触发知识点
鼠标移入“请选择知识点”输入框时,可以在下拉框中搜索知识点标准问题。
点选对应搜索结果到输入框,即完成事件和知识点的关联。
当选择为“空”时,即取消关联所有的知识点。
注意:
仅支持选择关联“已生效”状态的知识点,进行关联。
当某个知识点被关联上事件后,其标准问将不会被用户Query召回,也即标准问可以作为该事件知识点的名称使用。
该知识点的相似问仍然会被召回,也即用户Query也可触发该知识点。
当关联知识点后,在知识库中,将无法通过标准问搜索到该知识点,临时方案,后续会支持搜索。
Q:企业微信渠道的进入事件为何不生效?
- A: 请确认企业微信对应的自建应用是否允许“上报进入应用事件”,确认步骤:登录企业微信管理后台,找到对应的自建应用,在接收消息-API接收配置中,编辑选择需要接收的消息事件类型,勾选“上报进入应用事件”,并保存即可。可参照企业微信渠道自建应用绑定步骤,见下图。
4.9调试机器人
搭建完成了机器人,想要测试下机器人的对话效果,可以在页面右下角“调试机器人”中进行体验。
调试机器人是平台提供的在线调试工具,除对话流程外,也会展示对应的调试信息,如:知识点召回结果、实体抽取结果、意图触发情况等。
操作路径:点击页面右下角“机器人调试”按钮,打开测试对话框,模仿用户输入消息,实时测试知识点或意图召回结果。
4.9.1自然语言处理调试信息
展示分词情况
分词表示将用户本轮发送给机器人的消息根据词向量进行分割。
黄色高亮文本表示本轮消息分词结果。
删除线表示被删除的无意义前缀。
橙色高亮表示前一轮问答消息的实体词被继承到本轮用于补充消息内容。
展示实体抽取
实体与实体抽取,请去词库部分了解。
调试结果将展示:
从用户本轮发送给机器人的消息中抽取出的实体。
当用户消息中,包含实体值或实体值的多种说法时,会将抽取到的实体展示在这里,且在任务机器人的填槽中。
用户消息:宝宝频繁夜醒怎么办?假如词库中有一个实体是“阶段”,其中有一个实体值为“婴儿期”,而“婴儿期”的多种说法中有“宝宝”。
那么就可以抽取到“阶段”这个实体,归一化的实体值为“婴儿期”。
实体的结果影响分词。
4.9.2对话调试信息
回复方式
回复方式指在[机器人回复策略]中,设置的机器人回复方式,包括“指定优先”、“全回复”、“不回复”三种方式。
这里仅做展示,不支持修改。可以帮助判断机器人是在哪种回复方式下给出的机器人回复。
问答对话
当问答知识点被触发时,在右侧“被触发-问答对话”中,展示:
问答对话的top1-top3召回结果和设置的问答阈值。
知识点召回结果中,展示:匹配到知识点的标准问、匹配到的相似问,以及该召回知识点的置信度(即打分)。
点击知识点标准问题即可展开相应编辑页面,方便修改。
任务对话
下面分别介绍每一个字段的用途:
当前任务
场景名称:表示当前用户消息触发的场景名称。
意图名称:表示当前用户消息触发的意图名称。
意图触发情况
推荐意图:表示当前用户消息触发的意图。
置信度:表示推荐意图对应的得分。
句式匹配
用户消息:黄色高亮的内容为句式引用的词槽中填充的实体值。
匹配句式:展示匹配到的句式。示例,@食材:能不能吃。
经过的单元
- 按顺序展示当前用户发送消息,机器人给出回复经过的单元。
智能填槽
智能填槽是一种填槽的方式。
如果在任务场景中,开启了智能填槽,当抽取到枚举实体或意图实体时,会展示在这里。
已填充词槽
- 展示当前意图中,填充的所有词槽及其对应实体值。
更多
- 在任务对话推出消息后会跟随一个可以点击的“更多”,可以查看任务运行内部详情。
“更多”字段详解
msgId:798772050226610176
“msgId”是消息编号的意思,根据这个编号和时间,我们能从系统里定位到这个消息的详细情况。
当然,有了调试信息之后,还需要后台再查的概率就大大减小了。
触发意图: 意图名称: 报名 意图详情:从头开始意图流程
触发意图指明了当前触发的意图。
更新词槽:从用户query中抽取实体填入单元「询问姓名」的词槽 「姓名」“张三”
更新词槽指的是经过这个单元时词槽的变化情况,如果有填槽信息会反馈词槽填槽详情和其所填槽的单元。
如果关闭了仅在当前询问单元填槽,这个词槽有可能被提前填槽。
当前意图:----------------「报名」意图流程 ----------------
当前意图:反应了当前所在意图。
因为意图可以跳转,也有可能触发时触发到其他意图,通过这个功能,我们能快速定位到意图。
经过单元:询问姓名(询问填槽单元)
单元操作:词槽「姓名」中有唯一值张三,机器人不再询问
单元跳转:当词槽「姓名」的值为“张三”时,不满足分支跳转条件,跳转到单元【询问手机号】
经过单元:询问手机号(询问填槽单元)
单元操作:词槽「手机号」中没有值,机器人通过询问获取词槽值
单元跳转:机器人没有获取到词槽唯一值,尝试重复询问当前单元第1次,共1次
经过单元详细展开了经过单元运行的状态,在示例的任务中,「姓名」词槽收集到后,系统内的判断逻辑都进行了展示,让大家清楚的知道当前的运行情况。
额外的,当前询问的单元还展示了询问次数,以及询问次数使用情况,让大家对机器人的运行细节有了更深刻的了解。
闲聊对话
当触发闲聊对话时,展示以下信息:
展示在回复设置中设置的闲聊阈值。
展示匹配到的闲聊知识点。
展示匹配到的闲聊知识点的打分。
关键词问答
当设置的关键词被触发时,展示:
包含的关键词:展示匹配到的关键词知识点中,添加的所有关键词。
生效时间:展示该关键词知识点的生效时间。
4.9.3调试机器人功能介绍
问答报错
问答报错是平台提供的供用户反馈问答badcase的功能。
在测试问答的对话效果时,可能出现以下类型的问题,比如:
置信度过高或过低:即打分不符合预期的情况;
召回结果排序错误:问答会召回top3的知识点,但仅回复给用户最高得分的知识点。若在测试的过程中,认为排序有问题的话,可以上报这个分类的问题;
知识点未召回:指机器人没有按预期给予回复;
相似消息召回结果不一致:指两条很相似的用户消息,召回的机器人回复不是同一个答案;
1 点击入口:点击“问答报错”入口;
2 勾选消息:勾选机器人回复不符合预期的用户消息;
3 填写表单详情:选择问题分类和描述问题详情和期望的结果;
4 提交:填写完成后,点击提交;
提交报错后,平台可以针对你反馈的问题优化机器人的召回结果,提升问答对话效果。
体验版网页
点击“体验版网页”按钮,可以在新窗口中体验线上机器人效果。
比如可以体验到设置的预置回复或相似问题推荐功能。功能介绍见渠道[体验版网页]。
重置对话
重置对话,相当于重新开始对话。
通常在任务对话的多轮交互中,意图还在生命周期内。但期望测试其他意图的对话效果,或者重新体验该意图,可以进行重置。
1 一键点击“重置对话”,完成重置。
2 在任务流程中,也可以在输入框发送“/restart”来重置对话。